home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / bootlook.zip / BOOTLOOK.PAS < prev   
Pascal/Delphi Source File  |  1990-02-02  |  5KB  |  142 lines

  1. (* BOOTLOOK written by William C. Scott and released to the public   *)
  2. (*  domain on 12/06/89.  No rights reserved. No hooks permitted and  *)
  3. (*  no byteing below the disk.                                       *)
  4.  
  5. program bootlook;
  6.  
  7. uses crt,dos,disk;   { Disk.tpu is just a unit with the single procedure }
  8.                      { from Turbo Power's Turbo Professional 5.0 toolkit }
  9.                      { The procedure is GetDiskStuff in BOOTLOOK.        }
  10.  
  11. type
  12.  
  13.   bootrecptr = ^bootrecord;
  14.   bootrecord = record
  15.        nj       : array[0..2] of byte;       {offset  0   Near jump code   }
  16.        oem      : array[0..7] of byte;       {        3   OEM name and ver }
  17.        bytesec  : word;                      {       11   Bytes/Sector     }
  18.        sectclus : byte;                      {       13   Sectors/cluster  }
  19.        ressect  : word;                      {       14   Reserved sectors }
  20.        fattables: byte;                      {       16   FAT tables       }
  21.        direntrys: word;                      {       17   Directory entries}
  22.        logsec   : word;                      {       19   Logical sectors  }
  23.        MDS      : byte;                      {       21   Media descriptor }
  24.        FatSects : word;                      {       22   FAT sectors      }
  25.        Secstrak : word;                      {       24   Sectors/track    }
  26.        NumHeads : word;                      {       26   Number of heads  }
  27.        HidnSecs : word;                      {       28   Hidden sectors   }
  28.        bootcode : array[0..415] of byte;     {       30   boot code        }
  29.        partcode : array[0..15] of byte;      {      446   partition info   }
  30.        bootcode2: array[0..49] of byte;      {      462   rest of boot code}
  31.      end;
  32.  
  33. var
  34.   boot    : bootrecord;
  35.   bootptr : bootrecptr;
  36.   sc,sct,
  37.   oemstr  : string;
  38.   i       : integer;
  39.   drvnum  : byte;
  40.   DriveSpec,
  41.   ch      : char;
  42.   size    : longint;
  43.   rsize   : real;
  44.   lbytes  : longint;
  45.  
  46.  
  47. procedure cursoroff;
  48. var
  49.   regs: registers;
  50. begin
  51. regs.cx:= $2000;
  52. regs.ax:= $0100;
  53. intr($10,regs);
  54. end;
  55.  
  56. procedure cursoron;
  57. var
  58.   regs: registers;
  59. begin
  60. regs.cx:= $0607;
  61. regs.ax:= $0100;
  62. intr($10,regs);
  63. end;
  64.  
  65.  
  66. { Get/show diskette info }
  67.  
  68. procedure Bootrec(DriveSpec: char);
  69. begin
  70.   Drvnum := ord(DriveSpec)-ord('A');
  71.   if GetDiskStuff(drvnum,0,1,boot) then
  72.     with boot do begin
  73.       writeln;
  74.       writeln('You selected Drive ',ch,' to review.');
  75.       writeln;
  76.       writeln('This is what was found on track 0, sector 1 ... (the boot sector).');
  77.       writeln;
  78.       oemstr[0] := #8;
  79.       for i := 0 to 7 do
  80.         oemstr[i+1] := chr(boot.oem[i]);
  81.       writeln(' 1. Formatted using  '+oemstr);
  82.       writeln(' 2. ',ressect,' reserved sector(s)');
  83.       writeln(' 3. ',fattables,' FAT tables');
  84.       writeln(' 4. Allows ',direntrys,' directory entries in the root directory.');
  85.       writeln(' 5. ',hidnsecs,' hidden sectors.');
  86.       writeln(' 6. ',bytesec,' bytes per sector.');
  87.       writeln(' 7. ',sectclus,' sector(s) per cluster.');
  88.       writeln(' 8. ',secstrak,' sectors/track.');
  89.       writeln(' 9. Formatted using ',numheads,' head(s).');
  90.       writeln('10. ',logsec,' logical sectors are reported.');
  91.       rsize := boot.logsec/(boot.numheads * boot.secstrak);
  92.       writeln;
  93.       writeln('11. ',rsize:6:0,' Tracks (cylinders) ');
  94.  
  95.       lbytes := longint(bytesec);
  96.       rsize := longint(logsec)*lbytes -
  97.                  (longint(ressect)*lbytes +
  98.                  (longint(fatsects)*lbytes)*(longint(fattables)) +
  99.                  (longint(direntrys)/16.0)*lbytes);
  100.  
  101.       writeln;
  102.       writeln('Based on this information, the disk capacity is ... ',rsize:6:0,' bytes.');
  103.       writeln;
  104.       writeln('     Select another drive or press <ESC> to quit.');
  105.     end else
  106.     begin
  107.       clrscr;
  108.       writeln;
  109.       writeln;
  110.       writeln('Error detected trying to read drive ',drivespec);
  111.       writeln;
  112.       writeln;
  113.       writeln('Press any key to continue ... ');
  114.       writeln;
  115.       writeln;
  116.       writeln('Check the oil and tire pressure in ',drivespec,' too ...');
  117.     end;
  118.   repeat until keypressed;
  119. end;
  120.  
  121.  
  122. begin
  123.   cursoroff;
  124.   drivespec := #33;
  125.   repeat
  126.     clrscr;
  127.     writeln('Press <ESC> to end program. ');
  128.     writeln;
  129.     writeln('Input disk letter (make sure something is there to read) ... ');
  130.  
  131.     ch := upcase(readkey);
  132.     if ch in ['A'..'Z'] then
  133.       DriveSpec := ch
  134.      else DriveSpec := #0;
  135.     if DriveSpec in ['A'..'Z'] then
  136.       Bootrec(DriveSpec);
  137.   until ch = #27;
  138.   Cursoron;
  139.   clrscr;
  140.   writeln('oops ... ',chr(1));
  141. end.
  142.